#!/bin/bash

# DevDeploy 分类器API测试脚本
# 用法: ./test_classifier_api.sh [port]
# 默认端口: 8796

PORT=${1:-8796}

echo "🧪 DevDeploy分类器API测试脚本"
echo "================================"
echo "测试端口: ${PORT}"
echo ""

# 检查服务是否运行
echo "1. 检查服务状态..."
if curl -s http://localhost:${PORT}/health > /dev/null; then
    echo "✅ 分类器API服务运行正常"
else
    echo "❌ 分类器API服务未运行（端口 ${PORT}）"
    echo "请先启动服务: ./start_classifier_service.sh <model_path> ${PORT}"
    exit 1
fi

# 获取配置信息
echo ""
echo "2. 获取服务配置..."
echo "配置信息:"
curl -s http://localhost:${PORT}/config | python3 -m json.tool

# 测试分类功能（如果有测试图片）
echo ""
echo "3. 测试分类功能（使用base64编码）..."
if [ -f "test_image.jpg" ]; then
    echo "使用测试图片进行分类..."
    
    # 将图片转换为base64编码并保存到文件（放在项目根目录）
    BASE64_FILE="test_image_base64.txt"
    echo "正在生成base64编码文件: ${BASE64_FILE}..."
    # 兼容Linux和Mac的base64命令
    # Linux: base64 -w 0 (无换行)
    # Mac: base64 -i (指定输入文件) 或 base64 < file (重定向)
    if base64 -w 0 test_image.jpg > "${BASE64_FILE}" 2>/dev/null; then
        # Linux版本成功
        :
    elif base64 -i test_image.jpg > "${BASE64_FILE}" 2>/dev/null; then
        # Mac版本成功，需要去掉换行符
        tr -d '\n' < "${BASE64_FILE}" > "${BASE64_FILE}.tmp" && mv "${BASE64_FILE}.tmp" "${BASE64_FILE}"
    elif base64 < test_image.jpg > "${BASE64_FILE}" 2>/dev/null; then
        # 使用重定向方式（Mac备用方案），需要去掉换行符
        tr -d '\n' < "${BASE64_FILE}" > "${BASE64_FILE}.tmp" && mv "${BASE64_FILE}.tmp" "${BASE64_FILE}"
    else
        echo "❌ 无法生成base64编码，请检查base64命令是否可用"
        exit 1
    fi
    
    if [ $? -eq 0 ]; then
        echo "✅ Base64编码文件已生成: ${BASE64_FILE}"
    else
        echo "❌ 生成base64编码文件失败"
        exit 1
    fi
    
    # 使用Python创建JSON文件，避免shell转义问题
    TEMP_JSON=$(mktemp)
    python3 << EOF > "${TEMP_JSON}"
import json

with open("test_image_base64.txt", "r") as f:
    image_base64 = f.read().strip()

data = {"image": image_base64}
print(json.dumps(data))
EOF
    
    # 从文件读取JSON并发送请求
    response=$(curl -s -X POST "http://localhost:${PORT}/api/v1/classify/single" \
        -H "Content-Type: application/json" \
        -d "@${TEMP_JSON}")
    
    # 清理临时文件
    rm -f "${TEMP_JSON}"
    
    echo "分类结果:"
    echo "$response" | python3 -m json.tool
else
    echo "⚠️  未找到测试图片 test_image.jpg"
    echo "请将测试图片命名为 test_image.jpg 放在当前目录"
fi

# 查找对应的docker-compose文件（格式: docker-compose.${PORT}.${MODEL_NAME}.yml）
COMPOSE_FILE=$(ls docker-compose.*${PORT}*.yml 2>/dev/null | head -1)

echo ""
echo "4. API文档地址:"
echo "   http://localhost:${PORT}/docs"
echo ""
echo "5. 服务管理命令:"
if [ -n "${COMPOSE_FILE}" ]; then
    echo "   查看日志: docker-compose -f ${COMPOSE_FILE} logs -f"
    echo "   停止服务: docker-compose -f ${COMPOSE_FILE} down"
    echo "   重启服务: docker-compose -f ${COMPOSE_FILE} restart"
else
    echo "   ⚠️  未找到对应的docker-compose配置文件"
    echo "   请手动查找: ls docker-compose.${PORT}.*.yml"
fi

